/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.ecommerce.model.dao;

import br.com.ecommerce.model.Produto;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Query;
import org.hibernate.Transaction;

/**
 *
 * @author Admin
 */
public class ProdutoDAO {

    private Session session = null;
    private Transaction transaction = null;

    public void cadastrarProduto(Produto obj) {
        Integer id = (Integer)session.save(obj);
        obj.setCodProduto(id);
    }

    public void atualizarProduto(Produto obj) {
        session.update(obj);
    }

    public void excluirProduto(Produto obj) {
        session.delete(obj);
    }

    public Produto obterProduto(int codProduto) {
        Produto obj = (Produto) session.get(Produto.class, codProduto);
        return obj;
    }

    @SuppressWarnings("unchecked") //warning query.list()
    public List<Produto> listarProdutos() {
        Query query = session.createQuery("from Produto");
        List<Produto> produtos = query.list();
        return produtos;
    }

    public List<Produto> listarProdutosDisponiveis() {
        Query query = session.createQuery("from Produto as p where p.disponivel like \'Y\'");
        List<Produto> produtos = query.list();
        return produtos;
    }

    @SuppressWarnings("unchecked") //warning query.list()
    public List<Produto> buscarProduto(Produto obj) {
        Query query = session.createQuery("from Produto as p " +
            "where p.nome_produto like \'%" + obj.getNomeProduto() + "%\'");
        List<Produto> Produtos = query.list();
        return Produtos;
    }

    //begin
    public void beginHibernate() {
        try {
            session = HibernateUtil.getSession();
            transaction = session.beginTransaction();
        } catch (HibernateException e) {
            System.out.println("\nErro Begin Hibernate.\n\n");
            e.printStackTrace();
        }
    }

    //commit
    public void commitTransaction() {
        try {
            transaction.commit();
        } catch (HibernateException e) {
            System.out.println("\nError Commit Transaction.\n\n");
            e.printStackTrace();
        }
    }

    //close
    public void closeSession() {
        try {
            session.close();
        } catch (HibernateException e) {
            System.out.println("\nError Close Session.\n\n");
            e.printStackTrace();
        }
    }
    
}
